java Struts会话表单bean不保留状态
我正在使用Struts 1.3创建一个类似向导的界面,由3个jsp页面和3个Struts操作组成。流程如下所示: 第1页>;行动1->;第2页>;行动2->;第3页>;行动3
我使用会话表单bean(具有会话作用域的操作表单)在请求之间共享数据。我遇到的问题是,我在第2页中提交的数据在操作2中可用,但在操作3中不可用。我怀疑这可能是因为我在第3页没有一个表单来保存这些数据,或者因为我通过jQuery post方法调用action3而不是常规表单提交,但我真的不确定
我已经在网上挖了差不多一天了,但还是没有运气。谁能帮点忙吗。非常感谢
# 1 楼答案
您如何在action2和action3中访问page2的表单bean
我想你走错路了。你是不是有关于invalidCast之类的例外
# 2 楼答案
每次请求都会调用表单上的reset()方法,因此您将丢失状态。您可以通过编程方式控制此操作
让action2在表单上调用doNotReset()
# 3 楼答案
谢谢你的投入。下面是我解决问题的方法。我真的不喜欢这个解决方案,但它可能是我能找到的最整洁的解决方案
在第3页中,我为希望在操作3中可用的任何属性添加了隐藏字段。Struts将把值存储在这些隐藏字段中,当表单再次提交时,数据将重新填充到动作表单中
在我看来,Struts的工作原理是这样的:当它加载第3页时,它试图用myForm的值填充第3页中的表单。当表单被提交时,该过程被反转,它用来自用户表单的值填充myForm。问题是,在用用户提交的值填充myForm之前,它会重置myForm的属性。因为重置后,它找不到这些字段的值,所以它将其保留为空
我认为Struts那样工作没有意义,但是。。。就这样吧
# 4 楼答案
我想您可能已经为strutconfig中的两个操作分配了相同的表单。xml,因此它没有给出ClassCastException。顺便说一下,如果您想访问操作2中填充的表单bean,请执行以下操作
form2 = (FormBean2) session.getAttribute("form2");
上面的原因是因为两个操作使用相同的表单,struts可能会覆盖它。希望上面能解决你的问题